const fs = require('fs');
const path = require('path');

// 日志记录函数
function logMessage(message) {
    console.log(`[${new Date().toISOString()}] ${message}`);
}

function logError(message, error = null) {
    const errorMessage = `[${new Date().toISOString()}] ERROR: ${message}${error ? ' - ' + error.message : ''}`;
    console.error(errorMessage);
    
    // 写入错误日志文件
    try {
        fs.appendFileSync('error.log', errorMessage + '\n');
    } catch (writeError) {
        console.error('无法写入错误日志文件:', writeError.message);
    }
}

// 判断发送者角色
function getSenderRole(sender) {
    if (!sender) return '未知';
    
    // 检查是否包含"铭晖律所"关键词
    if (sender.includes('铭晖律所')) {
        return '客服销售';
    } else {
        return '客户';
    }
}

// 转换单个chat.json文件为Markdown
function convertChatToMarkdown(chatJsonPath) {
    try {
        // 读取JSON文件
        const jsonContent = fs.readFileSync(chatJsonPath, 'utf8');
        const chatData = JSON.parse(jsonContent);
        
        if (!Array.isArray(chatData)) {
            logError(`JSON文件格式不正确: ${chatJsonPath}`);
            return false;
        }
        
        let markdownContent = '';
        let currentRole = null;
        
        // 遍历聊天记录
        for (const message of chatData) {
            const { sender, content, send_time, type } = message;
            
            if (!sender || !content) {
                continue; // 跳过无效消息
            }
            
            const role = getSenderRole(sender);
            
            // 如果角色发生变化，添加新的角色标题
            if (role !== currentRole) {
                if (markdownContent) {
                    markdownContent += '\n'; // 在不同角色之间添加空行
                }
                markdownContent += `### ${role}\n`;
                currentRole = role;
            }
            
            // 添加消息内容
            markdownContent += `${content.trim()}\n\n`;
        }
        
        // 生成输出文件路径
        const outputPath = chatJsonPath.replace('.json', '.md');
        
        // 写入Markdown文件
        fs.writeFileSync(outputPath, markdownContent, 'utf8');
        
        return {
            success: true,
            outputPath,
            messageCount: chatData.length
        };
        
    } catch (error) {
        logError(`转换文件失败: ${chatJsonPath}`, error);
        return false;
    }
}

// 递归查找所有chat.json文件
function findChatJsonFiles(dir) {
    const jsonFiles = [];
    
    try {
        const items = fs.readdirSync(dir);
        
        for (const item of items) {
            const fullPath = path.join(dir, item);
            const stat = fs.statSync(fullPath);
            
            if (stat.isDirectory()) {
                // 递归搜索子目录
                jsonFiles.push(...findChatJsonFiles(fullPath));
            } else if (item === 'chat.json') {
                jsonFiles.push(fullPath);
            }
        }
    } catch (error) {
        logError(`读取目录失败: ${dir}`, error);
    }
    
    return jsonFiles;
}

// 主处理函数
function main() {
    // 解析命令行参数
    const args = process.argv.slice(2);
    const overwrite = args.includes('--overwrite') || args.includes('-o');
    
    logMessage('开始转换聊天记录为Markdown格式...');
    if (overwrite) {
        logMessage('覆盖模式：将覆盖现有的chat.md文件');
    } else {
        logMessage('跳过模式：将跳过已存在的chat.md文件');
    }
    
    const dataDir = path.join(__dirname, 'data');
    
    // 检查data目录是否存在
    if (!fs.existsSync(dataDir)) {
        logError(`数据目录不存在: ${dataDir}`);
        return;
    }
    
    // 查找所有chat.json文件
    const jsonFiles = findChatJsonFiles(dataDir);
    logMessage(`找到 ${jsonFiles.length} 个chat.json文件`);
    
    if (jsonFiles.length === 0) {
        logMessage('未找到任何chat.json文件');
        return;
    }
    
    let successCount = 0;
    let skipCount = 0;
    
    // 处理每个JSON文件
    for (const jsonFile of jsonFiles) {
        const mdFile = jsonFile.replace('.json', '.md');
        
        // 检查是否需要跳过已存在的文件
        if (!overwrite && fs.existsSync(mdFile)) {
            logMessage(`⏭️  跳过已存在的文件: ${mdFile}`);
            skipCount++;
            continue;
        }
        
        logMessage(`正在处理: ${jsonFile}`);
        
        const result = convertChatToMarkdown(jsonFile);
        
        if (result && result.success) {
            logMessage(`✅ 成功转换 ${result.messageCount} 条记录，保存到: ${result.outputPath}`);
            successCount++;
        } else {
            logMessage(`⚠️  转换失败: ${jsonFile}`);
        }
    }
    
    logMessage(`转换完成！成功: ${successCount}, 跳过: ${skipCount}, 总计: ${jsonFiles.length}`);
}

// 运行主函数
if (require.main === module) {
    main();
}

module.exports = {
    convertChatToMarkdown,
    findChatJsonFiles,
    getSenderRole
};
